package com.itheima.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.dao.UserDao;
import com.itheima.po.R;
import com.itheima.service.UserService;
import com.itheima.util.ValidateCodeUtils;
import jakarta.servlet.http.HttpSession;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/user")
public class UserMobileController {
//    业务应用（瑞吉点餐）->短信第三方服务商->移动、联通、电信->用户
    @PostMapping("/sendMsg")
    public R<String> sendMsg(@RequestBody User user){
//        1 生成一个验证码通过ValidateCodeUtils生成一个验证码
        Integer code = ValidateCodeUtils.generateValidateCode(4);
//        2 调用SMUtils把验证码发送给第三方短信服务商
        String mobile = "";
//        验证码
//        签名ID
        String smsSignId="";
        String templateId="";
        String appCode="";
        System.out.println("为了测试，code是："+code);
//        3 验证码存储起来，可以存储在当前用户的session，可以存储在进程外缓存中，此项目存储在Session中
//        httpSession.setAttribute(user.getPhone(),code);
        return R.success("发送成功");
    }

//    登录步骤：
//    1、接收post请求的参数手机号和验证码
//    2、判断该手机号的验证码是否正确
//    3、如果不是一个新用户的话，创建用户，然后把用户的ID放到session中
//    4、在过滤器中对/user/login接口放行
//    5、在过滤器中添加对手机端用户登录的登录状态验证，类似后台管理的登录状态验证
    @Autowired
    private UserService userService;
    @Autowired
    private User user;
    @PostMapping("/login")
    public R<String> login(@RequestBody Map<String,String> map, HttpSession httpSession){
//        获取前端传递的手机号和验证码
        String phone = map.getOrDefault("phone","");
        String code = map.getOrDefault("code","");
//        从session中获取发送验证码时存储的验证码
        Object codeInSession =  httpSession.getAttribute(phone);
//        验证码比较
        if(!code.equals(codeInSession.toString())){
            return R.error("验证码不正确");
        }
//        验证码比较是一样的
//        如果不是一个新用户的话，创建用户，然后把用户的ID放到session中
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(User::getPhone, phone);
        User userInDb = userService.getOne(lambdaQueryWrapper);
        if (userInDb == null){
            userInDb = new User();
            userInDb.setPhone(phone);
            userInDb.setStatus(1);
            userService.save(userInDb);
            httpSession.setAttribute("user",userInDb.getId());
        }
        return R.success("登录成功");
    }

}
